热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

知物由学|多级建模方法提升汉语语音识别效果,获ISCSLP大赛认可

导读:语音是人类信息沟通的重要途径,同时也是人机交互的重要桥梁,自动语音识别可以表述为通过计算机将人类语音信号转录为书面形式的文字输出的过


导读:语音是人类信息沟通的重要途径,同时也是人机交互的重要桥梁,自动语音识别可以表述为通过计算机将人类语音信号转录为书面形式的文字输出的过程。本文分享了网易易盾提出的多级建模单元的端到端汉语语音识别方法及具体的落地实践。

1.语音识别简介

语音是人类信息沟通的重要途径,同时也是人机交互的重要桥梁,自动语音识别(Automatic Speech Recognition,ASR)可以表述为通过计算机将人类语音信号转录为书面形式的文字输出的过程。

自 20 世纪 50 年代以来,自动语音识别问题就一直是机器学习界的一个重要研究课题。在过去几十年里,语音识别经历了从基于 GMM-HMM 的传统语音识别技术到端到端语音识别技术的发展历程。在传统的语⾳识别框架中,整个自动语音识别系统由多个模块组成,包括声学模型、发音词典和语言建模。端到端语音识别系统使用单个序列到序列模型,直接将输入的声学特征序列映射到文本序列,与传统的 GMM-HMM 混合系统相比,端到端语音识别方法具有训练流程简单、系统组成简单、识别效果好等优点,是目前学术研究和工业落地的热点。

2.为什么要用多级建模?

选择建模单元是构建 ASR 系统的重要一环,目前端到端汉语语音识别系统通常选择汉字作为模型的建模单元。然而,建模单元的选择不仅仅是涉及到网络的输出,也应该跟语言特性相关。汉语具有一定的语言特性,我们常说英语表音,汉语表意,看到一个英文,也许并不认识这个单词,但我们可以读出来,而看到一个汉字如果不认识的话,也许能猜出它的意思,但不能知道知道汉字的读音。也就是说汉字是一种文字符号,本身与发音无关。因此直接选择汉字作为端到端汉语语音识别系统的建模单元,模型很难学习到声学特征和发音单元之间的映射知识,同时由于语音和汉字之间没有“发音”关联性,模型直接学习从语音映射到汉字会变得困难。

针对上述问题,我们提出了一种多级建模的端到端汉语语音识别方法,除了汉字(Character-level)建模单元,我们还在模型中引入了音节(Syllable-level)作为建模单元。具体地,多级建模方法基于 Encoder-Decoder 的架构,使用多任务学习 hybrid CTC/Attention[1] 方式进行训练,其中 CTC 分支使用音节作为建模单元,使得模型可以学习到从语音特征序列到音节序列的映射信息,而 Attention 分支使用汉字作为建模单元,利用序列上下文信息和声学特征将音节转换为最终输出的汉字。多级建模单元使得模型在训练的过程中能够融合学习多级信息,包括音韵学信息和序列上下文信息,从而提升汉语语音识别的性能。

3.多级建模方法

模型架构

我们的模型使用了两级建模单元,包括汉字建模单元和音节建模单元。在训练阶段,使用语音特征序列和标注文本组成的数据对(X, Y)来训练网络,每个汉字可以由一个带调的音节表示,文本序列 Y 通过开源工具 Python-pinyin[2] 可以得到音节序列 S_Y,例如“北 京 天 安 门”转换成音节序列“bei3 jing1 tian1 an1 men2”。统计训练数据中出现的汉字并编号得到汉字词典,统计训练数据中出现的音节并编号得到音节词典。

下图展示了我们的多级建模系统架构。整个模型主要由前置的卷积模块, Encoder 模块和 Decoder 模块构成。前置的卷积模块提取输入序列的局部特征,并对序列进行下采样,减小后续的计算开销。Encoder 可以是 Conformer[3] 网络或者 Transformer[4] 网络。其中,Conformer 编码器层主要由四个子层构成:一个前馈网络层、自注意力模块、卷积模块和第二个前馈网络层。Transformer 编码器层主要由两个子层构成,分别是自注意力模块和前馈网络模块。解码器层由堆叠在一起的三个子模块组成:自注意力模块、多头注意力模块和前馈网络模块。

在这里插入图片描述

多级建模方法核心点在于:

音节建模:CTC 分支使用音节作为建模单元,特征序列X经过卷积模块和 Encoder 模块得到声学特征向量,通过一个全连接层将特征映射成音节字典大小的向量,再进行softmax归一化得到每一帧的概率分布,联合目标音节序列 S_Y 计算 CTC loss。

汉字建模:Attention 分支使用汉字作为建模单元。Decoder 模块接收音节embedding 向量和 Encoder 模块输出的声学特征向量作为输入,Decoder 的输出通过一个全连接层将特征映射成汉字字典大小的向量,再进行 Softmax 归一化得到概率分布,联合目标汉字序列 Y 计算 CE loss。

在多级建模方法中,Deocder 模块接收音节 Embedding 和声学特征向量作为输入,输出汉字序列,承担了将音节转换为汉字(Syllable-to-character)的任务。相对于利用之前时间步的汉字序列信息和声学特征预测下一个时间步的汉字(Character-to-character),将音节序列转换为汉字序列是一个更具有挑战性的任务。因此,我们在 Decoder 模块引入了中间层的辅助任务来促进从音节到汉字的转换,从而提升系统的性能,我们将辅助任务模块命名为 InterCE。

InterCE loss 的计算是使用 Decoder 模块中间层的输出,经过线性层和 Softamx 得到概率分布,最后计算和标注文本的交叉熵。整个网络的目标函数是基于音节的 CTC loss,基于汉字的 CE loss 和中间层 InterCE loss 的加权和。

模型推理

模型训练完成后,在推理阶段,Encoder 模块提取声学特征,Encoder 的输出通过线性层和 Softmax 函数得到每一帧在音节词典上的概率分布,通过 CTC prefix beam search 得到最优 N-best 的音节序列。Decoder 模块利用音节 Embedding 和声学特征向量作为输入,输出最终的汉字序列。模型推理的计算过程如下图所示。

在这里插入图片描述

实验验证

我们在汉语开源数据集 AISHELL-1[5] 上验证了多级建模方案的实验效果,AISHELL-1 包含来自 400 个说话人的 178 小时中文语音数据。我们分别使用 Conformer 网络和 Transformer 网络验证多级建模方案的效果。

在不使用语言模型的情况下,基于 Transformer 网络,多级建模方法在 AISHELL-1 上取得了 5.2% 的 CER,性能优于基于汉字建模和基于音节建模的基准模型。基于 Conformer 网络,多级建模方案在 Aishell-1 上取得了 4.6% 的 CER,优于最近发表的基于汉字建模的基准模型,实验结果表明多级建模方法提升了汉语语音识别性能。

在这里插入图片描述
在这里插入图片描述

我们通过消融实验来分析 InterCE loss 带来的性能提升。首先,我们在基于汉字建模的模型中增加 InterCE loss 辅助任务,结果显示 InterCE loss 辅助任务只能带来轻微的性能提升。其次,我们将 InterCE loss 从多级建模的框架中移除,结果显示在验证集和测试集上性能有 0.1% 的下降。消融实验结果表明在一个端到端模型中使用音节和汉字两级建模单元可以提升汉语语音识别的性能,除此之外,在多级建模的框架下增加辅助任务 InterCE loos 可以带来额外的性能提升。

在这里插入图片描述

4.总结

在本文中,我们提出了一种多级建模单元的端到端汉语语音识别方法,通过多级建模的方式,模型可以融合学习多级信息。此外,我们引入了辅助任务 InterCE loss 来进一步提升模型的准确性。在推理阶段,输入的特征序列通过 Encoder 以及后续的 CTC 分支生成音节序列,随后 Decoder 模块将音节序列转换成汉字,整个解码过程通过一个端到端模型完成,无需引入额外的转换模型,从而避免了多个模型带来的累积错误。我们的模型在广泛使用的中文 Benchmark 数据集 AISHELL-1 上取得了具有竞争力的效果,并且优于最近发表的文献结果。

更多细节请参考 Paper 链接:https://arxiv.org/abs/2205.11998。

引用内容

[1] Watanabe S, Hori T, Kim S, et al. Hybrid CTC/attention architecture for end-to-end speech recognition[J]. IEEE Journal of Selected Topics in Signal Processing, 2017, 11(8): 1240-1253.

[2] Gulati A, Qin J, Chiu C C, et al. Conformer: Convolution-augmented transformer for speech recognition[J]. arXiv preprint arXiv:2005.08100, 2020.

[3] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

[4] https://github.com/mozillazg/python-pinyin

[5] Bu H, Du J, Na X, et al. Aishell-1: An open-source mandarin speech corpus and a speech recognition baseline[C]//2017 20th conference of the oriental chapter of the international coordinating committee on speech databases and speech I/O systems and assessment (O-COCOSDA). IEEE, 2017: 1-5.







推荐阅读
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
author-avatar
闲看静观_925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有